
package cn.bluethink.eguan.model.rewardtask;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import cn.bluethink.eguan.model.core.EgObject;
import cn.bluethink.eguan.model.core.EgResult;
import cn.bluethink.eguan.model.core.EgUser;
import cn.bluethink.eguan.utils.DateTimeSerializer;

/**
 * @title 悬赏任务领取者
 * @Copyright 苏州中科蓝迪公司所有(c)2016-2021
 * @version 0.1
 *
 * @note 修订历史： （1）liuxn于2018年8月14日构建初始版本0.1
 *  (2)wanglei于2019年1月22日增加subTime
 */
public class EgReceiver extends EgObject {

	/**
	 * 领取者所做的悬赏任务
	 */
	@JsonInclude(JsonInclude.Include.NON_NULL)
	private EgRewardTask task = null;

	/**
	 * 接收任务的用户
	 */
	private EgUser user;

	/**
	 * 接收任务的时间
	 */
	@JsonSerialize(using = DateTimeSerializer.class)
	private Date btime;

	/**
	 * 任务完成时间
	 */
	@JsonSerialize(using = DateTimeSerializer.class)
	private Date etime;

	/**
	 * 完成该任务获取的赏金，不为零其结果就被采纳
	 * 多人领取，发布任务者打赏
	 */
	private Integer reward;

	/**
	 * 表示用户做任务的状态
	 * （1）如果领取者被指派，状态为未开始；如果用户领取任务后，状态为进行中
	 * （2）用户完成任务时，状态已完成；
	 * 注意：任务完成后，才可以打赏。
	 */
	private Integer status;

	/**
	 * 任务完成的结果，任务无需提交结果时，该项可为null
	 */
	@JsonInclude(JsonInclude.Include.NON_NULL)
	private EgResult result = null;
	
	/**
	 * 提交时间（无论是否提交结果）
	 */
	@JsonSerialize(using = DateTimeSerializer.class)
    private Date subTime;
	
	/**
	 * @since 1.0.0
	 * @roseuid 5B6E3B99001D
	 */
	public EgReceiver() {

	}
	
    public EgRewardTask getTask() {
        return task;
    }

    public void setTask(EgRewardTask task) {
        this.task = task;
    }

    public EgUser getUser() {
        return user;
    }

    public void setUser(EgUser user) {
        this.user = user;
    }

    public Date getBtime() {
        return btime;
    }

    public void setBtime(Date btime) {
        this.btime = btime;
    }

    public Date getEtime() {
        return etime;
    }

    public void setEtime(Date etime) {
        this.etime = etime;
    }

    public Integer getReward() {
        return reward;
    }

    public void setReward(Integer reward) {
        this.reward = reward;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public EgResult getResult() {
        return result;
    }

    public void setResult(EgResult result) {
        this.result = result;
    }

    public Date getSubTime() {
        return subTime;
    }

    public void setSubTime(Date subTime) {
        this.subTime = subTime;
    }

    public boolean isValidate() {
		return (user == null || task == null) ? false : (user.isValidate() && task.isValidate());
	}
}
